package bean;

import java.sql.SQLException;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import DAO.PacienteDAO;
import DAO.UsuarioDAO;
import Model.Usuario;
import Utils.Uteis;

public class UsuarioBean {
	
	private int id_usuario;
	private int ativo;
	private String nome;
	private String login;
	private String senha;
	private String confirmarsenha;
	private String email;	
	private UIInput senhaValidation;
	private Usuario user;
	
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	private int cargo;
	
	public int getIdUsuario() {
		return id_usuario;
	}
	public void setIdUsuario(int id) {
		this.id_usuario = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public int getCargo() {
		return cargo;
	}
	public void setCargo(int cargo) {
		this.cargo = cargo;
	}
	
	public int getAtivo() {
		return ativo;
	}
	public void setAtivo(int ativo) {
		this.ativo = ativo;
	}
	
	public String getConfirmarsenha() {
		return confirmarsenha;
	}
	public void setConfirmarsenha(String confirmarsenha) {
		this.confirmarsenha = confirmarsenha;
	}
	
	public UIInput getSenhaValidation() {
		return senhaValidation;
	}
	public void setSenhaValidation(UIInput senhaValidation) {
		this.senhaValidation = senhaValidation;
	}
	
	public String Salvar()
	{
		
		try
		{			
			Usuario user;
			if(this.id_usuario > 0)
				user = UsuarioDAO.LoadObject(this.id_usuario);
			else
				user = new Usuario();
			
			user.setNome(this.nome);
			user.setEmail(this.email);			
			user.setLogin(this.login);
			user.setAtivo(this.ativo);
			
			if(user.getSenha() != null)
			{
				if((this.senha != null && this.senha.length() >= 5) && (user.getSenha() != Uteis.encripta(this.senha)))			
					user.setSenha(Uteis.encripta(this.senha));				
			}
			else
				user.setSenha(Uteis.encripta(this.senha));		
				
			
			if(this.id_usuario > 0)
			{
				user.setIdUsuario(this.id_usuario);
				UsuarioDAO.Update(user);
			}
			else
				UsuarioDAO.Insert(user);
			
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações salvas com sucesso"));
			
		}
		catch (SQLException ex) {
			// TODO: handle exception
			ex.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}		
		return "usuario_list";
	}
	
	public String Editar()
	{
		try
		{
			HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
			Usuario usuarioLogado = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("currentUser");
			Usuario user = null;
			int id =  Integer.parseInt(request.getParameter("idusuario"));
		
			user = UsuarioDAO.LoadObject(id);			
			setIdUsuario(user.getIdUsuario());
			setNome(user.getNome());
			setLogin(user.getLogin());
			setAtivo(user.getAtivo());			
			setEmail(user.getEmail());
			this.setUser(usuarioLogado);			
			return "usuario_edit";
			
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao trazer as informações, contate o administrador do sistema"));
			return "usuario_list";
		}			
	}	
	
	public String Inativar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		int idUsuario = Integer.parseInt(request.getParameter("idusuario"));
		
		HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
		Usuario currentuser = (Usuario) session.getAttribute("currentUser");
		if(currentuser != null)
		{
			if(idUsuario != currentuser.getIdUsuario())
			{
				try
				{			
					UsuarioDAO.InativarUsuario(idUsuario);
					FacesContext facesContext = FacesContext.getCurrentInstance();
					facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Deletadas com sucesso"));
					
				}
				catch(SQLException sqlex)		
				{
					FacesContext facesContext = FacesContext.getCurrentInstance();
					facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
				}		
			}
			else
			{
				FacesContext facesContext = FacesContext.getCurrentInstance();
				facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_WARN, "Atenção!", "Não é possivel Inativar-se !"));
			}			
			return "usuario_list";			
		}
		else
		{
			return "usuario_list";
		}		
	}
	
	public void validaSenhas(FacesContext context, UIComponent uicomponent, Object value)
	{
		String confirmaSenha = value.toString();
		if(confirmaSenha.length() > 5)
		{			
			String senha = this.senhaValidation.getLocalValue().toString();				
			if(! confirmaSenha.equals(senha))
			{
				((UIInput)uicomponent).setValid(false);
				FacesMessage message = new FacesMessage();
				message.setDetail("As senhas não conferem !");        
				message.setSeverity(FacesMessage.SEVERITY_ERROR);	        
				throw new ValidatorException(message);
			}		
		}
	}
	public Usuario getUser() {
		return user;
	}
	public void setUser(Usuario user) {
		this.user = user;
	}	
}
